/* @flow */

import { toArray } from '../util/index'

export function initUse (Vue: GlobalAPI) {
  Vue.use = function (plugin: Function | Object) {
    // 用于记录所有安装的插件
    const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
    // 判断当前插件是否存在
    if (installedPlugins.indexOf(plugin) > -1) {
      return this
    }

    // additional parameters
    // 把传入的参数转化为数组，并且去掉第一个参数（插件本身）
    const args = toArray(arguments, 1)
    // 把 this 插入数组
    args.unshift(this)
    if (typeof plugin.install === 'function') {
      // 传入对象调用 install 方法
      plugin.install.apply(plugin, args)
    } else if (typeof plugin === 'function') {
      // 传入函数直接调用函数
      plugin.apply(null, args)
    }
    installedPlugins.push(plugin)
    return this
  }
}
